/**
 * 
 */
package br.com.cnpv.managebean.cliente;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import br.com.cnpv.modelo.bo.CidadeBO;
import br.com.cnpv.modelo.bo.ClienteBO;
import br.com.cnpv.modelo.bo.EstadoBO;
import br.com.cnpv.modelo.bo.TipoClienteBO;
import br.com.cnpv.modelo.entity.Cidade;
import br.com.cnpv.modelo.entity.Cliente;
import br.com.cnpv.modelo.entity.Usuario;

/**
 * @author ricardo
 *
 */
@ManagedBean(name="clienteMB")
@SessionScoped
public class ClienteMB extends ClienteBean {

	public String paginaNovo()
	{
		try
		{
			cliente = new Cliente();
			
			// bo
			EstadoBO estadoBO = EstadoBO.getInstance();
			estadoList = estadoBO.listar();
			
			TipoClienteBO tipoClienteBO = TipoClienteBO.getInstance();
			tipoClienteList = tipoClienteBO.listar();
			
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		
		return "pretty:novoCliente";
	}
	
	public String paginaBusca()
	{

		try
		{

			//BO
			ClienteBO clienteBO = ClienteBO.getInstance();
	
			cliente = new Cliente();
	//		clienteList = new ArrayList<Cliente>();
	
			clienteList = clienteBO.listar();
			
			
		}catch(Exception e)
		{
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "Ocorreu um erro. Tente mais tarde");
			FacesContext.getCurrentInstance().addMessage(null, message);
			e.printStackTrace();
		}
		
		return "pretty:cliente";
		
			
	}
	
	public void buscar()
	{
		try
		{
			//BO
			ClienteBO clienteBO = ClienteBO.getInstance();
			
			clienteList = clienteBO.buscar(cliente);
			
		}catch(Exception e)
		{
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "Ocorreu um erro. Tente mais tarde");
			FacesContext.getCurrentInstance().addMessage(null, message);
			e.printStackTrace();
		}
	}
	

	public String saveOrUpdate()
	{
		FacesMessage message = null;
		String retorno = "";
		
		try
		{
			//BO's
			ClienteBO clienteBO = ClienteBO.getInstance();
			EstadoBO estadoBO = EstadoBO.getInstance();
			TipoClienteBO tipoClienteBO = TipoClienteBO.getInstance();

			HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
			Usuario usuario = (Usuario)request.getSession().getAttribute("usuario");
			//BO
			ClienteBO bo = ClienteBO.getInstance();
			cliente.setIdUsuario(usuario.getId());
			cliente.setIdAssociacao(usuario.getIdAssociacao());
			bo.saveOrUpdate(cliente);
			
			
			if(cliente.getId() == 0)
			{
				message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Cliente cadastrado com Sucesso!");
				cliente = new Cliente();				
				estadoList = estadoBO.listar();
				tipoClienteList = tipoClienteBO.listar();

				retorno = null;				
				
			}else
			{
				message = new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Cliente alterado com Sucesso!");
				cliente = new Cliente();
				clienteList = clienteBO.listar();
				retorno = "pretty:cliente";		
			}
		}catch(Exception e)
		{
			message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "Ocorreu um erro. Tente mais tarde");
			e.printStackTrace();
		}
		
		FacesContext.getCurrentInstance().addMessage(null, message);
		
		return retorno;
	}
	
	public String paginaAlterar()
	{
		try
		{
			
			// BO
			CidadeBO cidadeBO = CidadeBO.getInstance();
			EstadoBO estadoBO = EstadoBO.getInstance();
			estadoList = estadoBO.listar();
			
			cliente = clienteSelecionado;
			
			Cidade cidade = cidadeBO.getCidade(cliente.getIdCidade());
			cidadeList = cidadeBO.listarCidades(cidade.getIdUnidadeFederativa());
			
			idEstado = cidade.getIdUnidadeFederativa();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		
		return "pretty:alterarCliente";
	}

	public void listaCidades()
	{
		try
		{
			//BO
			CidadeBO cidadeBO = CidadeBO.getInstance();
			
			cidadeList = cidadeBO.listarCidades(idEstado);
			
		}catch(Exception e)
		{
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "Ocorreu um erro. Tente mais tarde");
			FacesContext.getCurrentInstance().addMessage(null, message);
			e.printStackTrace();
		}
	}
}
